package handler;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

/*
 * @Controller注解标识一个类作为“控制器”（例如 Web 控制器）
 * 通常与@RequestMapping注解的注解处理程序方法结合使用
 * 此注解用作一个@Component，允许通过类路径扫描自动检测实现类
 */
@Controller
public class RequestMappingHandler {
    /* 用于使用灵活方法签名将Web请求映射到请求处理类中的方法的注解
     * 此注解可以在类和方法级别使用。在大多数情况下，在方法级别还可以使用HTTP方法的特定变体之一：
     * @GetMapping、@PostMapping、@PutMapping、@DeleteMapping，或@PatchMapping
     * 使用控制器接口（例如用于AOP代理）时，请确保将所有映射注解（如@RequestMapping和@SessionAttributes）
     * 始终一致地放在控制器接口上，而不是在实现类上
     * ModelMap是@RequestMapping注解的方法的默认参数类型之一
     */
    @RequestMapping("/subpath/handle")
    public String first(ModelMap model, HttpServletRequest req) {
        model.addAttribute(req.getRequestURI());
        return "home";
    }

    /**
     * Model是@RequestMapping注解的方法的默认参数类型之一
     */
    @RequestMapping("/web")
    public String second(HttpServletRequest req, Model model) {
        model.addAttribute("data", req.getRequestURI());
        return "home";
    }
}
